import { PagerDto } from "@dto/public.dto";
import { IsNotEmpty, IsNumber, IsInt, Min, Max, IsString, IsEmail, IsDate, MaxLength } from "class-validator";
import { PartialType } from "@nestjs/mapped-types";

/**
 * 创建用户DTO
 */
export class CreateUserDto {
    // 用户名
    @IsNotEmpty()
    @IsString()
    readonly userName: string;

    // 部门ID
    @IsNotEmpty({ message: '部门不能为空'})
    @IsInt({ message: '部门格式有误'})
    readonly deptId: number;

    // 职位
    @IsNotEmpty({ message: '职位不能为空'})
    @IsInt({ message: '职位格式有误'})
    readonly jobId: number;

    // 别名
    @IsString()
    readonly nickName?: string;

    // 性别
    @IsInt()
    @Min(0)
    @Max(1)
    readonly gender?: number;

    // 手机号
    @IsNotEmpty()
    @IsString()
    readonly phone: string;

    // 邮箱
    @IsEmail()
    email?: string;

    // 头像
    @IsString()
    readonly avatarName?: string;

    // 头像路径
    @IsString()
    readonly avatarPath?: string;

    // 密码
    @IsNotEmpty()
    @IsString()
    readonly password?: string;

    // 禁用状态（1启用、0禁用）
    @IsNotEmpty()
    @IsNumber()
    readonly enabled: number;
}

/**
 * 修改用户DTO
 */
export class UpdateUserDto extends PartialType(CreateUserDto) {}


/**
 * 查询列表DTO
 */
export class QueryListDTO extends PagerDto {
    // 部门id
    deptId?: number

    // 启用禁用状态
    enabled: number|null

    // 关键字
    @MaxLength(10, { message: '关键字最多为10个字符'})
    keyword?: string

    // 创建开始时间
    createStart?: string

    // 创建结束时间
    createEnd?: string
}


/**
 * 通过部门列表
 */
export class ListByDeptDto extends PagerDto {
    @IsNotEmpty({ message: '部门id不能为空' })
    deptId: number
}
